﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Chilis.Proveedores.TransferObjects;
using System.Data.SqlClient;
using System.Data;

namespace Chilis.Proveedores.DataAccess
{
    using Mapper;

    public sealed class CriterioDA
    {
        public static IList<CriterioDTO> GetAllCriterio()
        {
            var resultado = new List<CriterioDTO>();
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Criterio"))
            {
                while (reader.Read())
                {
                    resultado.Add(reader.GetCriterio());
                }
            }

            return resultado;
        }

        public static CriterioDTO GetCriterio(int idCriterio)
        {
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Criterio_Select", idCriterio))
            {
                reader.Read();
                return reader.GetCriterio();
            }
        }

        public static int AddCriterio(CriterioDTO criterio) {
            try
            {
                var db = Conexion.CrearBaseDatos();

                var proceso = (int)db.ExecuteScalar("pa_Insert_Criterio",
                                                    criterio.IdCriterio,
                                                    criterio.Nombre,
                                                    criterio.Descripcion);

                return proceso;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public static int UpdateCriterio(CriterioDTO criterio)
        {
            try
            {
                var db = Conexion.CrearBaseDatos();

                var proceso = (int)db.ExecuteScalar("pa_Update_Criterio",
                                                    criterio.IdCriterio,
                                                    criterio.Nombre,
                                                    criterio.Descripcion);

                return proceso;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public static bool DeleteCriterio(int IdCriterio)
        {
            try
            {
                var db = Conexion.CrearBaseDatos();

                db.ExecuteNonQuery("pa_Delete_Criterio", IdCriterio);

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public static IList<CriterioDTO> SearchCriterio(string nombre)
        {
            var resultado = new List<CriterioDTO>();
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Criterio_Search", nombre))
            {
                while (reader.Read())
                {
                    resultado.Add(reader.GetCriterio());
                }
            }

            return resultado;
        }

        public static IList<CriterioDTO> SearchCriterioName(string nombre)
        {
            var resultado = new List<CriterioDTO>();
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Criterio_SearchName", nombre))
            {
                while (reader.Read())
                {
                    resultado.Add(reader.GetCriterio());
                }
            }

            return resultado;
        }
    }
}
